"""
etree函数：
    parse函数解析本地的xml或html文档
        参数：
            要解析的文档地址
            解析器-HTMLParser使用HTML解析器进行解析，同时表示我们要解析的文档类型是HTML类型  参数  编码表
        返回值：
            ElementTree  元素树对象
xpath表达式：
    /html/body/div[3]/div[1]/div/div[1]/ol   /开头 从根节点开始定位的绝对定位  一级一级往下走
    //*[@id="content"]/div/div[1]/ol         //开头  从任意位置开始的相对定位

    直接写表示标签
    前面@表示属性
    拿文本text()

编写xpath方法：
    通过浏览器控制台帮我们生成xpath，但是一般般
        缺陷一：爬虫程序获取的是源码数据，控制台中调用的xpath是选然后的 这里如果有js修改的痕迹  那么直接复制是不可用的
        缺陷二：比较笨，采用最保险的方法生成路劲
"""
from lxml import etree

html = etree.parse(r'./豆瓣电影 Top 250.html', etree.HTMLParser(encoding='utf-8'))     #解析豆瓣电影 Top 250.html文件
print(html)     #接下来我们需要通过xpath表达式去除树形模型对象中我们所需的数据

# //*[@id="content"]/div/div[1]/ol
# /html/body/div[3]/div[1]/div/div[1]/ol
# 解析xpath表达式
print(html.xpath('//*[@id="content"]/div/div[1]/ol'))

grid_view = html.xpath('//ol[@class="grid_view"]/li')   # 获取任意位置class为grid_view的ol标签里的所有li
# print(grid_view)

#获取每个li结构对象
for grid in grid_view:
    # print(grid)
    #在每个li中找到对于电影的链接地址href属性
    # detail_url = grid.xpath('./div/div[2]/div[1]/a/@href')[0]     #浏览器控制台帮我们生成的xpath
    detail_url = grid.xpath('.//div[@class="hd"]/a/@href')[0]       #自己通过分析需要获取信息的标签和标签的上级标签写的xpath
    # print(detail_url)

    titles = grid.xpath('.//div[@class="hd"]/a/span/text()') #获取标题  注意这里要找到数据所在的具体标签  数据所在标签不给下标的话会返回一个列表 包含所有为该标签的数据
    titles = ''.join(titles)
    # print(titles)

    name = grid.xpath('.//div[@class="bd"]/p/br/preceding-sibling::text()')[0]   #导演和演员信息 这里以br为分界线向上取‘哥哥’的数据
    # print(name)

    classes = grid.xpath('.//div[@class="bd"]/p/br/following-sibling::text()')[0]   #时间产地分类信息  向下取‘弟弟’信息
    # print(classes)

    rating_num = grid.xpath('.//span[@class="rating_num"]/text()')[0]
    # print(rating_num)

    # appraise_num = grid.xpath('.//div[@class="star"]/span/text()')[-1]
    # appraise_num = grid.xpath('.//div[@class="star"]/span[4]/text()')[0]
    appraise_num = grid.xpath('.//div[@class="star"]/span[last()]/text()')[0]
    # print(appraise_num)

    quote = grid.xpath('.//span[@class="inq"]/text()')[0]
    # print(quote)

    img_title = grid.xpath('.//div[@class="pic"]//img/@alt')[0]    #获取class为pic里的img标签里面的alt属性值  图片名称
    print(img_title)

    img_src = grid.xpath('.//div[@class="pic"]//img/@src')[0]       #图片地址
    # print(img_src)